package top.codedance.iotp.common.util;

public interface AEncryption {
    /**
     * 随机生成密钥对
     *
     * @throws Exception
     */
    AsymmetricEncryption.KeyStringPair genKeyPair() throws Exception;
    /**
     * RSA公钥加密
     *
     * @param body      加密字符串
     * @param publicKey 公钥
     * @return 密文
     * @throws Exception 加密过程中的异常信息
     */
    String encrypt(byte[] body, String publicKey) throws Exception;
    /**
     * RSA公钥加密
     *
     * @param body      加密字符串
     * @param publicKey 公钥
     * @return 密文
     * @throws Exception 加密过程中的异常信息
     */
    String encrypt(String body, String publicKey) throws Exception;
    /**
     * RSA私钥解密
     *
     * @param body       加密字符串
     * @param privateKey 私钥
     * @return 铭文
     * @throws Exception 解密过程中的异常信息
     */
    String decrypt(byte[] body, String privateKey) throws Exception;
    /**
     * RSA私钥解密
     *
     * @param body       加密字符串
     * @param privateKey 私钥
     * @return 铭文
     * @throws Exception 解密过程中的异常信息
     */
    String decrypt(String body, String privateKey) throws Exception;
    /**
     * 用私钥对加密数据进行签名
     *
     * @param encryptedStr
     * @param privateKey
     * @return
     */
    String sign(String encryptedStr, String privateKey);
    /**
     * 校验数字签名
     *
     * @param body
     * @param publicKey
     * @param sign
     * @return 校验成功返回true，失败返回false
     */
    boolean verify(String body, String publicKey, String sign);
}
